package vip.liux.backend.application.service.pay;


import vip.liux.application.dots.PagedResultDto;
import vip.liux.application.dots.PagedResultRequestDto;
import vip.liux.backend.application.service.pay.dto.wallet.PayWalletRechargeDto;

import java.math.BigDecimal;

/**
 * 钱包充值 Service 接口
 *
 * @author jason
 */
public interface PayWalletRechargeService {

    /**
     * 创建钱包充值记录（发起充值）
     *
     * @param uid      用户编号
     * @param payPrice 支付充值金额
     * @param userIp   用户Ip
     * @return 钱包充值记录
     */
    PayWalletRechargeDto createWalletRecharge(String uid, String userIp, BigDecimal payPrice);

    /**
     * 获得钱包充值记录分页
     *
     * @param uid       用户编号
     * @param pageReqVO 分页请求
     * @param payStatus 是否支付
     * @return 钱包充值记录分页
     */
    PagedResultDto<PayWalletRechargeDto> getWalletRechargePackagePage(String uid, PagedResultRequestDto pageReqVO, Boolean payStatus);

    /**
     * 更新钱包充值成功
     *
     * @param id         钱包充值记录编号
     * @param payOrderNo 支付订单编号
     */
    void updateWalletRechargerPaid(Long id, String payOrderNo);

    /**
     * 发起钱包充值退款
     *
     * @param id     钱包充值编号
     * @param userIp 用户 ip 地址
     */
    void refundWalletRecharge(Long id, String userIp);

    /**
     * 更新钱包充值记录为已退款
     *
     * @param id          钱包充值记录编号
     * @param refundId    钱包充值退款编号（实际和 id 相同）
     * @param payRefundNo 退款单id
     */
    void updateWalletRechargeRefunded(Long id, Long refundId, String payRefundNo);
}
